package com.kuang.bq;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

/**
 * @author luomingliang
 * @date 2021/5/24 20:19
 */
public class QueueTest {

    ArrayBlockingQueue<Object> queue = new ArrayBlockingQueue<>(3);
    /**
     * 抛出异常
     */
    @Test
    public void test001() {
        //队列的大小
        System.out.println(queue.add("a"));
        System.out.println(queue.add("b"));
        System.out.println(queue.add("c"));
        //java.lang.IllegalStateException: Queue full 会抛异常
//        System.out.println(queue.add("d"));
        System.out.println("===================");

        System.out.println(queue.remove());
        System.out.println(queue.remove());
        System.out.println(queue.remove());
        System.out.println(queue.element());
        //java.util.NoSuchElementException 会抛异常
//        System.out.println(queue.remove());
        //查看队首元素 java.util.NoSuchElementException 会抛异常
//        System.out.println(queue.element());
    }

    /**
     * 抛出异常
     */
    @Test
    public void test002() {
        System.out.println(queue.offer("a"));
        System.out.println(queue.offer("b"));
        System.out.println(queue.offer("c"));
        //返回false 不会抛异常
        System.out.println(queue.offer("d"));
        System.out.println("===================");
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        //返回null  不会抛异常
        System.out.println(queue.poll());
        //查看队首元素 返回null  不会抛异常
        System.out.println(queue.peek());
    }

    /**
     * 等待，阻塞（一直阻塞）
     */
    @Test
    public void test003() throws InterruptedException {
        queue.put("a");
        queue.put("b");
        queue.put("c");
        //队列没有位置了，一直阻塞
//        queue.put("d");
        System.out.println("====================");
        System.out.println(queue.take());
        System.out.println(queue.take());
        System.out.println(queue.take());
        //没有东西取 一直阻塞
//        System.out.println(queue.take());
    }

    /**
     * 等待，阻塞（等待超时）
     */
    @Test
    public void test004() throws InterruptedException {
        queue.offer("a");
        queue.offer("b");
        queue.offer("c");
        //等待2秒 返回false 没有位置就退出
        System.out.println(queue.offer("d", 2, TimeUnit.SECONDS));
        System.out.println("=================");
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        System.out.println(queue.poll());
        //等待2秒 返回null 没有东西取就退出
        System.out.println(queue.poll(2, TimeUnit.SECONDS));
    }
    
}
